﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Security.Cryptography;
using Core.Security.CoreMembership;
using Core.Message.Entities;
using Core.ExceptionHandling;
using Core.Controls.Message;
using System.Web.Security;
using Core.Common.Session;
using vHCS.SYS.Business;
using Core.Cryptography;
using Core.Common.Mail;
using Core.NTier.UserInterface;
namespace vHCS.Web.Account
{
    /// <summary>
    /// DUNGN2
    /// </summary>
    public partial class ForgetPassword : System.Web.UI.Page
    {
        #region Const

        private const string _PG_LOCAL_LOGIN = "~/Account/LocalLogin.aspx";

        #endregion
        
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!IsPostBack)
                {

                    txtUsername.Text = CoreMembershipProvider.CurrentLoginStateUser;
                    SYS_UsersCollection cl = new SYS_UsersCollection();
                    SYS_UsersBL bl = new SYS_UsersBL();
                    bl = cl.FindById_BL(txtUsername.Text.Trim());
                    if (bl == null || bl.DTO == null)
                    {
                        Response.Redirect(_PG_LOCAL_LOGIN);
                    }
                    txtQuestion.Text = bl.PasswordQuestion;
                }
            } 
            catch (Exception ex)
            {
                AlertMessage mess = UserInterfaceExceptionHandler.HandleExcetion(ex);
                MessageBox.Show(mess);
            }
        }

        protected void btnBack_Click(object sender, EventArgs e) {
            Response.Redirect(_PG_LOCAL_LOGIN);
        }


        protected void btnSendRequest_Click(object sender, EventArgs e)
        {
            try
            {
                this.lblAnserFail.Visible = false;
                this.lblSuccess.Visible = false;
                this.lblFailAnser.Visible = false;

                SYS_UsersCollection cl = new SYS_UsersCollection();
                SYS_UsersBL bl = new SYS_UsersBL();
                SYS_ConfigParamBL bl_param = new SYS_ConfigParamBL();
                SYS_ConfigParamCollection cl_param =new SYS_ConfigParamCollection();


                //Lấy thông tin account
                bl = cl.FindById_BL(txtUsername.Text.Trim());
                //Lấy thông tin param: Số lần đăng nhập sai tối đa
                bl_param = cl_param.FindByCode("MaxLogin");

                int failAnswer = bl.FailedPasswordAnswerAttemptCount;
                int maxlogin = 0;
                int.TryParse(bl_param.Value, out maxlogin);
                bool LockOut = bl.IsLockedOut;

                string answer = bl.PasswordAnswer;
                string answer_input =Cryptographer.EncryptMD5(txtAnswer.Text.Trim());

                if (failAnswer < maxlogin && LockOut==false)
                {
                    if (answer == answer_input)//Nếu câu trả lời hợp lệ
                    {
                        this.lblAnserFail.Visible = false;

                        //Update số lần cập nhật sai mật khẩu của User
                        failAnswer = 0;
                        cl.Update_FailPasswordAnswer(bl.UserName, failAnswer,false);
                        //Khởi tạo và gửi pass mới cho user
                        cl.ResetPasswordForget(txtUsername.Text.Trim());
                        this.lblSuccess.Visible = true;
                        //Response.Redirect(_PG_LOCAL_LOGIN);
                    }
                    else
                    {
                        MessageBox.ShowByMessCode("10090");
                        //Update số lần cập nhật sai mật khẩu của User
                        failAnswer++;
                        cl.Update_FailPasswordAnswer(bl.UserName, failAnswer,false);
                       
                    }
                }
                //Hiển thị thông báo trả lời sai quá số lần qui định
                if (failAnswer>=maxlogin || LockOut==true)
                {
                    this.lblFailAnser.Visible = true;
                    cl.Update_FailPasswordAnswer(bl.UserName, 0, true);
                }
            }
            catch (Exception ex)
            {
                AlertMessage mess = UserInterfaceExceptionHandler.HandleExcetion(ex);
                MessageBox.Show(mess);
            }
        }
    }
}